package cn.edu.gsau.info.service.impl;

import cn.edu.gsau.info.dao.HuojiangshenheDao;
import cn.edu.gsau.info.dao.ZhengmingcailiangDao;
import cn.edu.gsau.info.models.*;
import cn.edu.gsau.info.dao.HuojiangDao;
import cn.edu.gsau.info.myenum.ModuleIdClass;
import cn.edu.gsau.info.service.*;
import cn.edu.gsau.info.vo.Params;
import cn.edu.gsau.info.vo.Review;
import cn.edu.gsau.info.vo.UpdateFileName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * @description:
 * @author: ltl
 * @date:  
 * @param: 
 * @return: 
 **/
@Service
public class HuojiangServiceImpl extends ServiceImpl<HuojiangDao, Huojiang> implements IHuojiangService {

    @Autowired
    HuojiangDao huojiangDao;

    /**
     * @description:更新了查找条件
     * @author: ltl
     * @date: 2022/11/24
     * @param: 带有项目名、流程状态、填报人id的对象 params
     * @return: 带有分页效果的集合
     **/
    @Override
    public List<Huojiang> selectByCondation(Params params) {
        System.out.println(params);
       HashMap<String,Object> map = new HashMap<>();
       map.put("xiangmuName",params.getXiangmuName());
       map.put("status",params.getStatus());
       map.put("tianbaoId",params.getTianbaoId());
       IPage<Huojiang> iPage = new Page<>(params.getPageYeShu(),5);
       QueryWrapper qw = new QueryWrapper();
       qw.like(map.get("xiangmuName")!=null && !map.get("xiangmuName").equals(""),"xiangmuName",map.get("xiangmuName"));
       qw.eq(map.get("status")!=null && !map.get("status").equals(""),"status",map.get("status"));
       qw.eq("tianbaoId",map.get("tianbaoId"));
        IPage page = huojiangDao.selectPage(iPage, qw);
        List list = new ArrayList();
        list.add(page);
        return list;
    }

    /**
     * @description:通过id查找与之对应的数据
     * @author: ltl
     * @date: 2022/11/22
     * @param: 主键id
     * @return: 对应的一条数据
     **/
    @Autowired
    private ZhengmingcailiangDao zhengmingcailiangDao;

    @Override
    public Huojiang selectOne(long id) {
        QueryWrapper qw = new QueryWrapper();
        qw.eq("id",id);
        Huojiang huojiang = huojiangDao.selectOne(qw);
        return huojiang;
    }

    /**
     * @description:通过主键id删除数据
     * @author: ltl
     * @date:  2022/11/22
     * @param: 主键id
     * @return: 数据
     **/
    @Override
    public void delete(Long id) {
        System.out.println(id);
        huojiangDao.deleteById(id);
    }

    /**
     * @description:添加获奖信息和证明材料
     * @author: ltl
     * @date:  2022、22、23
     * @param: huojiang
     * @return: 无
     **/
    @Value("${gsau.upload.path}")
    private String path;
    @Autowired
    private IUserService userService;

    @Autowired
    private HuojiangshenheDao huojiangshenheDao;

    @Autowired
    private IZhengmingcailiaoService zhengmingcailiaoService;

    @Autowired
    private IHuojiangshenheService shenheService;

    @Autowired
    private IReviewService reviewService;

    @Transactional

    @Override

    public void addInfo(User user , Huojiang huojiang) {
        QueryWrapper qw1 = new QueryWrapper();
        qw1.eq("moduleId",ModuleIdClass.HOUJIANG_id);
        Review review1 = reviewService.getOne(qw1);
        QueryWrapper qw2 = new QueryWrapper();
        qw2.eq("id",review1.getUserId());
        User user2 = userService.getOne(qw2);


        QueryWrapper qw = new QueryWrapper();
        qw.eq("id",user.getId());
        User user1 = userService.getOne(qw);

        huojiang.setTianbaoId(user.getId());
        huojiang.setCreateTime(new Date());
        huojiang.setCreateBy(user1.getNickName());
        huojiang.setManager(user2.getNickName());
        huojiang.setStatus("进行中");
        huojiang.setNode("待审核");
        int insert = huojiangDao.insert(huojiang);
        //boolean save = huojiangService.save(huojiang);
        //获取主键值id
        Long id = huojiang.getId();
        //获取文件名
        UpdateFileName zmcl[] = huojiang.getFileList();
        for (int i = 0; i < zmcl.length; i++) {
            Zhengmingcailiao zm = new Zhengmingcailiao();
            //表名对应的数值
            zm.setModuleId(ModuleIdClass.HOUJIANG_id);
            //记录数id
            zm.setRecoreId(id);
            //得到老文件名
            zm.setFileName(zmcl[i].getOldFileName());
            //路径：盘符加工号加新文件名
            zm.setFileFullPath(path+user.getUserName()+"/"+zmcl[i].getNewFileName());
            //添加
            //zhengmingcailiangDao.insert(zm);
            zhengmingcailiaoService.save(zm);
        }
        //增加审核
        Shenhe shenhe = new Shenhe();
        shenhe.setModuleId(ModuleIdClass.HOUJIANG_id);
        shenhe.setRecoreId(id);
        shenhe.setTijiaoTime(new Date());
        shenhe.setTijiaoName(user1.getNickName());
        shenhe.setTijiaoMemo(huojiang.getMemo());
        shenhe.setTijiaoId(user1.getId());
        shenhe.setShenHeName(user2.getNickName());
        shenhe.setShenheId(user2.getId());
        shenheService.save(shenhe);
    }

    /**
     * @description:通过用户id查找要审核的记录
     * @author: ltl
     * @date: 2022、11、28
     * @param: id
     * @return: 带分页的记录集合
     **/
    public List selectShengHe(User user,Integer page) {
//        QueryWrapper qw1 = new QueryWrapper();
//        qw1.eq("shenheId",user.getId());
//        List list1 = shenheService.list(qw1);
        IPage<Huojiang> iPage= new Page<>(page,5);
        QueryWrapper qw = new QueryWrapper();
        qw.eq("node","待审核");
        qw.eq("manager",user.getNickName());
        IPage iPage1 = huojiangDao.selectPage(iPage, qw);
        List list = new ArrayList();
        list.add(iPage1);
        return list;
    }

    /**
     * @description: 通过模块id和记录数id找到审核的记录，并添加审核意见和修改节点
     * @author: ltl
     * @date: 2022/11/29
     * @param:shenhe 审核意见，记录数id，节点
     * @return:无
     **/
    @Override
    public void UpdateYiJianAndNote(Shenhe shenhe) {

        QueryWrapper qw = new QueryWrapper();
        qw.eq("moduleId",ModuleIdClass.HOUJIANG_id);
        qw.eq("recoreId",shenhe.getRecoreId());
        qw.eq("memo","0");
        Shenhe shenhe1 = shenheService.getOne(qw);
        //Shenhe shenhe1 = new Shenhe();
        shenhe1.setShenHeResult(shenhe.getShenHeResult());
        shenhe1.setShenHeTime(new Date());
        shenhe1.setMemo("1");
        shenheService.updateById(shenhe1);

        Huojiang huojiang = new Huojiang();
        huojiang.setNode("审核"+shenhe.getNote());
        if (huojiang.getNode().equals("审核通过")){
            huojiang.setStatus("流转完成");
        }
        huojiang.setId(shenhe.getRecoreId());
        huojiangDao.updateById(huojiang);
    }

    /**
     * @description:通过模块id和记录数id、memo查询审核流程
     * @author: ltl
     * @date:  2022、11、29
     * @param: 记录数id
     * @return: 审核流程的集合
     **/
    @Override
    public List selectLiuCheng(Long id) {
        QueryWrapper qw = new QueryWrapper();
        qw.eq("moduleId",ModuleIdClass.HOUJIANG_id);
        qw.eq("recoreId",id);
        qw.eq("memo","1");
        List list = shenheService.list(qw);
        return list;
    }

    /**
     * @description:修改获奖信息
     * @author: ltl
     * @date: 2022/11/26
     * @param: form表单数据
     * @return: 无
     **/
    @Override
    public void updateShuJu(User user , Huojiang huojiang) {
        if (huojiang.getNode().equals("审核未通过")){
            huojiang.setUpdateBy(user.getNickName());
            huojiang.setUpdateTime(new Date());
            huojiang.setNode("待审核");
            huojiangDao.updateById(huojiang);
            //获取工号
            user.setUserName("liumaobing");
            //获取主键值id
            Long id = huojiang.getId();
            //获取文件名
            UpdateFileName zmcl[] = huojiang.getFileList();
            if (zmcl!=null && !zmcl.equals("")){
                for (int i = 0; i < zmcl.length; i++) {
                    Zhengmingcailiao zm = new Zhengmingcailiao();
                    //表名对应的数值
                    zm.setModuleId(ModuleIdClass.HOUJIANG_id);
                    //记录数id
                    zm.setRecoreId(id);
                    //得到老文件名
                    zm.setFileName(zmcl[i].getOldFileName());
                    //路径：盘符加工号加新文件名
                    zm.setFileFullPath(path+user.getUserName()+"/"+zmcl[i].getNewFileName());
                    //添加
                    zhengmingcailiangDao.insert(zm);
                }
            }
            //审核人
            QueryWrapper qw1 = new QueryWrapper();
            qw1.eq("moduleId",ModuleIdClass.HOUJIANG_id);
            Review review1 = reviewService.getOne(qw1);
            QueryWrapper qw2 = new QueryWrapper();
            qw2.eq("id",review1.getUserId());

            User user2 = userService.getOne(qw2);


            Shenhe shenhe = new Shenhe();
            shenhe.setModuleId(ModuleIdClass.HOUJIANG_id);
            shenhe.setRecoreId(huojiang.getId());
            shenhe.setTijiaoTime(new Date());
            shenhe.setTijiaoName(user.getNickName());
            shenhe.setTijiaoMemo(huojiang.getMemo());
            shenhe.setTijiaoId(user.getId());
            shenhe.setShenHeName(user2.getNickName());
            shenhe.setShenheId(user2.getId());
            shenheService.save(shenhe);

//            QueryWrapper qw = new QueryWrapper();
//            qw.eq("moduleId",ModuleIdClass.HOUJIANG_id);
//            qw.eq("recoreId",huojiang.getId());
        }


    }




//    /**
//     * @description:查找证明材料
//     * @author: ltl
//     * @date: 2022/11/24
//     * @param: 表名数加记录数id
//     * @return: 返回证明材料
//     **/
//    @Override
//    public List selectZMCL(Long id) {
//        QueryWrapper qw = new QueryWrapper();
//        qw.eq("moduleId",ModuleIdClass.HOUJIANG_id);
//        qw.eq("recoreId",id);
//        List<Zhengmingcailiao> zhengmingcailiaos = zhengmingcailiangDao.selectList(qw);
//        return zhengmingcailiaos;
//    }


    //    @Override
//    public List<Huojiang> selectAll() {
//        return huojiangDao.selectList(null);
//    }

//    @Override
//    public List<Huojiang> selectById(Huojiang huojiang) {
//        IPage<Huojiang> page = new Page<>(1,4);
//        QueryWrapper<Huojiang> qw = new QueryWrapper();
//        qw.eq("tianbaoId",huojiang.getTianbaoId());
//        IPage<Huojiang> pages = huojiangDao.selectPage(page,qw);
//        List list = new ArrayList();
//        list.add(pages);
//        return list;
//    }
}
